<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ブロック関数プラグイン</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.75.1">
<link rel="home" href="index.html" title="Smarty マニュアル">
<link rel="up" href="plugins.html" title="Chapter 16. プラグインによる Smarty の拡張">
<link rel="prev" href="plugins.modifiers.html" title="修飾子プラグイン">
<link rel="next" href="plugins.compiler.functions.html" title="コンパイラ関数プラグイン">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="navheader">
<table width="100%" summary="Navigation header">
<tr><th colspan="3" align="center">ブロック関数プラグイン</th></tr>
<tr>
<td width="20%" align="left">
<a accesskey="p" href="plugins.modifiers.html">Prev</a> </td>
<th width="60%" align="center">Chapter 16. プラグインによる Smarty の拡張</th>
<td width="20%" align="right"> <a accesskey="n" href="plugins.compiler.functions.html">Next</a>
</td>
</tr>
</table>
<hr>
</div>
<div class="sect1" title="ブロック関数プラグイン">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="plugins.block.functions"></a>ブロック関数プラグイン</h2></div></div></div>
<div class="funcsynopsis">
<table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table">
<tr>
<td><code class="funcdef">void <b class="fsfunc">smarty_block_name</b>(</code></td>
<td>
<var class="pdparam">$params</var>, </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td>
<var class="pdparam">$content</var>, </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td>
<var class="pdparam">&amp;$smarty</var>, </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td>
<var class="pdparam">&amp;$repeat</var><code>)</code>;</td>
<td> </td>
</tr>
</table>
<div class="paramdef-list">
<code>array <var class="pdparam">$params</var></code>;<br><code>mixed <var class="pdparam">$content</var></code>;<br><code>object <var class="pdparam">&amp;$smarty</var></code>;<br><code>boolean <var class="pdparam">&amp;$repeat</var></code>;</div>
<div class="funcprototype-spacer"> </div>
</div>
<p>
     ブロック関数は、<code class="literal">{func} .. {/func}</code> 形式の関数です。
     この関数によって囲まれたテンプレートのブロックの内容を処理します。
     ブロック関数は、同じ名前の
     <a class="link" href="language.custom.functions.html" title="Chapter 8. カスタム関数">カスタム関数</a>
     より優先されます。つまり、テンプレート関数
     <code class="literal">{func}</code> とブロック関数
     <code class="literal">{func}..{/func}</code> の両方を定義することはできません。
    </p>
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem"><p>
     デフォルトでは、実装された関数はSmartyによって２度
     （１度目は開始タグ、２度目は終端タグによって）呼び出されます
     （この動作の変更方法は次の <code class="literal">$repeat</code> を参照）。
    </p></li>
<li class="listitem"><p>
     ブロック関数の開始タグのみ <a class="link" href="language.syntax.attributes.html" title="属性">属性</a>
     を持つ場合があります。全ての属性はテンプレートからテンプレート関数に、
     連想配列として <em class="parameter"><code>$params</code></em> に格納された状態で渡されます。
     また、終端タグを処理している時に開始タグの属性にアクセスする事が可能です
    </p></li>
<li class="listitem"><p>
     変数 <em class="parameter"><code>$content</code></em> の値は、
     関数が開始タグ又は終端タグのどちらから呼ばれるかによって変わります。
     開始タグの場合は <code class="constant">NULL</code>、終端タグの場合はテンプレートブロックのコンテンツです。
     テンプレートブロックが Smarty によって既に処理されている事に注意して下さい。
     つまり、受け取るのはテンプレートソースではなくテンプレートの出力です。
    </p></li>
<li class="listitem"><p>
     <em class="parameter"><code>$repeat</code></em> パラメータは実装された関数に参照によって渡され、
     そのブロックが何回表示されるのかを操作する事ができます。
     デフォルトでは、最初のブロック関数の呼び出し(開始タグ)のとき
     <em class="parameter"><code>$repeat</code></em> は <code class="constant">TRUE</code> で、その後に呼び出される場合(終端タグ)は、
     <code class="constant">FALSE</code> となります。 実装された関数で <em class="parameter"><code>$repeat</code></em> を <code class="constant">TRUE</code>
     とする事で、<code class="literal">{func}...{/func}</code> 間のコンテンツが再度評価され、
     <em class="parameter"><code>$content</code></em> パラメータに新しいブロックコンテンツが格納された状態で、
     再び呼び出されます。
    </p></li>
</ul></div>
<p>
     ネストしたブロック関数がある場合、変数
     <code class="literal">$smarty-&gt;_tag_stack</code>
     にアクセスする事で親のブロック関数を見つける事が可能です。
     <a class="ulink" href="http://php.net/var_dump" target="_top"><code class="varname">var_dump()</code></a>
     を行い、構造をはっきりと理解すべきべきです。
    </p>
<div class="example">
<a name="id2861469"></a><p class="title"><b>Example 16.5. ブロック関数プラグイン</b></p>
<div class="example-contents"><pre class="programlisting">

&lt;?php
/*
 * Smarty plugin
 * -------------------------------------------------------------
 * File:     block.translate.php
 * Type:     block
 * Name:     translate
 * Purpose:  テキストブロックを翻訳する
 * -------------------------------------------------------------
 */
function smarty_block_translate($params, $content, &amp;$smarty, &amp;$repeat)
{
    // 終了タグでのみ出力します
    if(!$repeat){
        if (isset($content)) {
            $lang = $params['lang'];
            // ここで $content に対する翻訳を行います
            return $translation;
        }
    }
}
?&gt;

     </pre></div>
</div>
<br class="example-break"><p>
 <a class="link" href="api.register.block.html" title="register_block()"><code class="varname">register_block()</code></a>
 および
 <a class="link" href="api.unregister.block.html" title="unregister_block()"><code class="varname">unregister_block()</code></a>
 も参照してください。
</p>
</div>
<div class="navfooter">
<hr>
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left">
<a accesskey="p" href="plugins.modifiers.html">Prev</a> </td>
<td width="20%" align="center"><a accesskey="u" href="plugins.html">Up</a></td>
<td width="40%" align="right"> <a accesskey="n" href="plugins.compiler.functions.html">Next</a>
</td>
</tr>
<tr>
<td width="40%" align="left" valign="top">修飾子プラグイン </td>
<td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td>
<td width="40%" align="right" valign="top"> コンパイラ関数プラグイン</td>
</tr>
</table>
</div>
</body>
</html>
